export default {

  destroyed() {
    this.$events.off()
    this.eventMap.length = 0
  },
  data() {
    return {
      eventMap: []
    }
  },
  methods: {
    /**
     * 订阅事件
     * @param name 事件名称
     * @param callback 回调函数
     */
    subscribe(name, callback) {
      if (this.eventMap.includes(name)) {
        return
      }
      this.eventMap.push(name)
      this.$events.on(name, callback)
    },
    /**
     * 订阅事件一次
     * @param name 事件名称
     * @param callback 回调函数
     */
    subscribeOne(name, callback) {
      this.$events.once(name, callback)
    },
    /**
     * 注销订阅事件
     * @param name 事件名称
     * @param callback 注销回调
     */
    unSubscribe(name) {
      this.$events.off(name, undefined)
    },
    /**
     * 注销所有事件
     */
    unSubscribeAll() {
      this.$events.removeAll()
    },
    /**
     * 触发事件
     * @param name 事件名称
     * @param args 事件参数列表
     */
    trigger(name, ...args) {
      this.$events.emit(name, ...args)
    }
  }
}
